rate-limits.tsx 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { PermissionAction } from '@supabase/shared-types/out/constants'
  2. import { useParams } from 'common'
  3. import { PageContainer } from 'ui-patterns/PageContainer'
  4. import {
  5. PageHeader,
  6. PageHeaderAside,
  7. PageHeaderDescription,
  8. PageHeaderMeta,
  9. PageHeaderSummary,
  10. PageHeaderTitle,
  11. } from 'ui-patterns/PageHeader'
  12. import { PageSection, PageSectionContent } from 'ui-patterns/PageSection'
  13. import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
  14. import { RateLimits } from '@/components/interfaces/Auth/RateLimits/RateLimits'
  15. import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout'
  16. import DefaultLayout from '@/components/layouts/DefaultLayout'
  17. import { DocsButton } from '@/components/ui/DocsButton'
  18. import NoPermission from '@/components/ui/NoPermission'
  19. import { UnknownInterface } from '@/components/ui/UnknownInterface'
  20. import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
  21. import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
  22. import { DOCS_URL } from '@/lib/constants'
  23. import type { NextPageWithLayout } from '@/types'
  24. const RateLimitsPage: NextPageWithLayout = () => {
  25. const { ref } = useParams()
  26. const showRateLimits = useIsFeatureEnabled('authentication:rate_limits')
  27. const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
  28. PermissionAction.READ,
  29. 'custom_config_gotrue'
  30. )
  31. if (!showRateLimits) {
  32. return <UnknownInterface urlBack={`/project/${ref}/auth/users`} />
  33. }
  34. if (isPermissionsLoaded && !canReadAuthSettings) {
  35. return <NoPermission isFullPage resourceText="access your project's auth rate limit settings" />
  36. }
  37. return (
  38. <>
  39. <PageHeader size="default">
  40. <PageHeaderMeta>
  41. <PageHeaderSummary>
  42. <PageHeaderTitle>Rate Limits</PageHeaderTitle>
  43. <PageHeaderDescription>
  44. Safeguard against bursts of incoming traffic to prevent abuse and maximize stability
  45. </PageHeaderDescription>
  46. </PageHeaderSummary>
  47. <PageHeaderAside>
  48. <DocsButton
  49. href={`${DOCS_URL}/guides/platform/going-into-prod#rate-limiting-resource-allocation--abuse-prevention`}
  50. />
  51. </PageHeaderAside>
  52. </PageHeaderMeta>
  53. </PageHeader>
  54. <PageContainer size="default">
  55. {!isPermissionsLoaded ? (
  56. <PageSection>
  57. <PageSectionContent>
  58. <GenericSkeletonLoader />
  59. </PageSectionContent>
  60. </PageSection>
  61. ) : (
  62. <RateLimits />
  63. )}
  64. </PageContainer>
  65. </>
  66. )
  67. }
  68. RateLimitsPage.getLayout = (page) => (
  69. <DefaultLayout>
  70. <AuthLayout title="Rate Limits">{page}</AuthLayout>
  71. </DefaultLayout>
  72. )
  73. export default RateLimitsPage